package beans;

import java.util.List;

import javax.annotation.PostConstruct;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.RequestScoped;

import dao.PersonaDao;
import dao.ProyectoDao;
import excepciones.DaoException;

import modelo.Persona;
import modelo.Proyecto;

@ManagedBean 
@RequestScoped
public class EditarEquipoTrabajoBean {

	@ManagedProperty(value="#{editProyectoBean}")
	private EditProyectoBean editProyectoBean;
	
	private List<Persona> equipoTrabajo;
	private List<Persona> seleccionBorrar;
	private Proyecto proyecto;
	private List <Persona> seleccionEquipoTrabajo;
	private List<Persona> personas;	

	@PostConstruct
	public void init(){

		// Seteo el proyecto a utilizar
		setProyecto(getEditProyectoBean().getProyecto());
		// Traigo el equipo de trabjo
		setEquipoTrabajo((List<Persona>) getProyecto().getEquipo_trabajo());

		PersonaDao personaDao = new PersonaDao();
		try {
			setPersonas(personaDao.getTodasLasPersonas());
		} catch (DaoException e) {
			e.printStackTrace();
		}
	}

	public void agregar(){
		List<Persona> equipo = this.getEquipoTrabajo();
		List<Persona> selec = this.getSeleccionEquipoTrabajo();
		for (Persona persona : selec) {
			if (!getEquipoTrabajo().contains(persona))
				equipo.add(persona);
		}		
		this.setEquipoTrabajo(equipo);
		actualizarProyecto();
	}
	
	public void borrar(){
		List<Persona> aBorrar = this.getSeleccionBorrar();
		
		for (Persona persona : aBorrar) {
			this.getEquipoTrabajo().remove(persona);
		}
		actualizarProyecto();
	}
	
	/**
	 * Actualiza en la BD las modificaciones que se hicieron en el proyecto
	 */
	protected void actualizarProyecto(){
		ProyectoDao proDao = new ProyectoDao(proyecto);
		this.proyecto.setEquipo_trabajo(getEquipoTrabajo());
		try {
			proDao.update();
			proDao.closeEntityManager();
		} catch (DaoException e) {
			e.printStackTrace();
		}
	}
	
	public String volver(){
		return "irEditarProyectos";
	}
	
	public List<Persona> getEquipoTrabajo() {
		return equipoTrabajo;
	}

	public void setEquipoTrabajo(List<Persona> equipoTrabajo) {
		this.equipoTrabajo = equipoTrabajo;
	}

	public List<Persona> getSeleccionEquipoTrabajo() {
		return seleccionEquipoTrabajo;
	}

	public void setSeleccionEquipoTrabajo(List<Persona> seleccionEquipoTrabajo) {
		this.seleccionEquipoTrabajo = seleccionEquipoTrabajo;
	}
	
	public Proyecto getProyecto() {
		return proyecto;
	}

	public void setProyecto(Proyecto proyecto) {
		this.proyecto = proyecto;
	}

	public List<Persona> getPersonas() {
		return personas;
	}

	public void setPersonas(List<Persona> personas) {
		this.personas = personas;
	}

	public List<Persona> getSeleccionBorrar() {
		return seleccionBorrar;
	}

	public void setSeleccionBorrar(List<Persona> seleccionBorrar) {
		this.seleccionBorrar = seleccionBorrar;
	}

	public EditProyectoBean getEditProyectoBean() {
		return editProyectoBean;
	}

	public void setEditProyectoBean(EditProyectoBean editProyectoBean) {
		this.editProyectoBean = editProyectoBean;
	}
	
}
